package com.itheima.juc29;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * @author li
 * ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor
 * 7个参数：核心线程数量、最大线程数量、空闲线程最大存活时间、任务队列、创建线程工厂、任务的拒绝策略
 * 参数一：核心线程数量           不能小于0
 * 参数二：最大线程数量           不能小于0，最大数量 >= 核心线程数量
 * 参数三：空闲线程最大存活时间     不能小于0
 * 参数四：时间单位               用TimeUtil指定
 * 参数五：任务队列               不能为null
 * 参数六：创建线程工厂           不能为null
 * 参数七：任务的拒绝策略          不能为null
 */
public class MyFreeThreadPoolDemo {
    public static void main(String[] args) {
        ThreadPoolExecutor pool = new ThreadPoolExecutor(
                // 参数一：核心线程数量           不能小于0
                3,
                // 参数二：最大线程数量           不能小于0，最大数量 >= 核心线程数量
                6,
                // 参数三：空闲线程最大存活时间     不能小于0
                60,
                // 参数四：时间单位               用TimeUtil指定
                TimeUnit.SECONDS,
                // 参数五：任务队列               不能为null
                new ArrayBlockingQueue<>(3),
                // 参数六：创建线程工厂           不能为null
                Executors.defaultThreadFactory(),
                // 参数七：任务的拒绝策略          不能为null
                new ThreadPoolExecutor.AbortPolicy()
        );
        pool.submit(new MyRunnable());
    }
}
